from flask import Blueprint, request, render_template, flash, redirect, url_for, abort

from forms import ProductEditForm
from models import Product, db

mall = Blueprint('mall', __name__,
                 template_folder="templates",
                 static_folder="static")


@mall.route('/product/list/<int:page>')
# @login_require
def product_list(page):
    """商品列表"""
    # 每页多少条
    page_size = 2  # 每页多少条
    # 查询搜索条件的
    name = request.args.get('name', '')
    print('page', page)
    print('name----', name)
    if name:
        page_data = Product.query.filter(Product.name.contains(name),
                                         is_valid=True)\
            .paginate(page=page, per_page=page_size)
    else:
        page_data = Product.query.paginate(page=page, per_page=page_size)
    return render_template('product_list.html', page_data=page_data)

@mall.route('/product/detail/<uid>')
def product_detail(uid):
    """商品详情"""
    # todo 如果触发了404,404的页面需要定制
    prod_obj = Product.query.filter_by(uid=uid).first_or_404()
    print(prod_obj)
    return render_template('product_detail.html', prod_obj=prod_obj)

@mall.route('/prod/add', methods=['GET', 'POST'])
def product_add():
    """商品添加"""
    form = ProductEditForm()
    if form.validate_on_submit():
        # 保存到数据库
        flash('新增商品成功', 'success')
        prod_obj = Product(
            # 商品标题
            name=form.data['name'],
            # 商品描述 （富文本）
            content=form.data['content'],
            # 商品推荐语
            desc=form.data['desc'],
            # 类型
            types=form.data['types'],
            # 价格
            price=form.data['price'],
            # 原价￥
            origin_price=form.data['origin_price'],
            # 主图
            # img=form.data['img'],
            img='/xxx.jpg',
            # 渠道
            channel=form.data['channel'],
            # 链接
            buy_link=form.data['buy_link'],
            # 商品状态
            status=form.data['status'],
            # 剩余库存
            remain_count=form.data['remain_count'],
            # 库存
            sku_count=form.data['sku_count'],
            # 浏览次数
            view_count=form.data['view_count'],
            # 评分
            score=form.data['score'],
            # 逻辑删除
            is_valid=form.data['is_valid'],
            # 排序
            reorder=form.data['reorder'],
        )
        db.session.add(prod_obj)
        db.session.commit()
    #     跳转到商品列表中去
        return redirect(url_for('mall.product_list', page=1))
    else:
        # 消息提示
        flash('请修改页面中的页面错误，然后提交', 'warning')
        print(form.errors)
    return render_template('product_add.html', form=form)

@mall.route('/product/edit/<uid>', methods=['GET', 'POST'])
def product_edit(uid):
    """ 商品编辑 """
    print('uid', uid)
    # 查询商品信息
    prod_obj = Product.query.filter_by(uid=uid, is_valid=True).first()
    print(prod_obj)
    if prod_obj is None:
        abort(404)
    form = ProductEditForm(obj=prod_obj)
    if form.validate_on_submit():
        # 商品标题
        prod_obj.name = form.name.data
        # 商品描述 （富文本）
        prod_obj.content = form.data['content']
        # 商品推荐语
        prod_obj.desc = form.desc.data
        # 类型
        prod_obj.types = form.types.data
        # 价格
        prod_obj.price = form.price.data
        # 原价￥
        prod_obj.origin_price = form.origin_price.data
        # 主图
        # img=form.data['img'],
        prod_obj.img = '/xxx.jpg',
        # 渠道
        prod_obj.channel = form.channel.data
        # 链接
        prod_obj.buy_link = form.buy_link.data
        # 商品状态
        prod_obj.status = form.status.data
        # 剩余库存
        prod_obj.remain_count = form.remain_count.data
        # 库存
        prod_obj.sku_count = form.sku_count.data
        # 浏览次数
        prod_obj.view_count = form.view_count.data
        # 评分
        prod_obj.score = form.score.data
        # 逻辑删除
        prod_obj.is_valid = form.is_valid.data
        # 排序
        prod_obj.reorder = form.reorder.data
        db.session.add(prod_obj)
        db.session.commit()
        flash('修改成功', 'success')
        # 跳转到商品列表中去
        return redirect(url_for('mall.product_list', page=1))
    else:
        # 消息提示
        flash('请修改页面中的页面错误，然后提交', 'warning')
        print(form.errors)
    return render_template('product_edit.html', form=form, prod_obj=prod_obj)

@mall.route('/product/delete/<uid>', methods=['GET', 'POST'])
def product_delete(uid):
    """商品的删除"""
    prod_obj = Product.query.filter_by(uid=uid, is_valid=True).first()
    if prod_obj is None:
        return 'no'
    prod_obj.is_valid = False
    db.session.add(prod_obj)
    db.session.commit()
    return 'ok'
